package com.wmh.baseservice.merchant.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wmh.baseservice.merchant.pojo.MerchantGroupGoods;
import com.wmh.baseservice.common.mybatisplus.methods.CommonService;
import com.wmh.baseservice.merchant.pojo.dto.GroupGoodsDTO;
import com.wmh.baseservice.user.pojo.UsGroupGoodsOrder;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author wmh generator
 * @since 2022-03-03
 */
public interface MerchantGroupGoodsService extends CommonService<MerchantGroupGoods> {

    /**
     * 添加团购商品
     */
//    void add(MerchantGroupGoods merchantGroupGoods, List<JSONObject> priceArray, String areaList);

    /**
     * 修改团购商品
     */
//    void updateGroupGoods(MerchantGroupGoods merchantGroupGoods, List<JSONObject> priceArray, Integer hasSpec, String areaList);

    /**
     * 弱修改团购商品 , 如果团购商品正在拼团修改调用此方法
     * @param item 团购商品对象
     * @param priceArray 优惠档位列表
     * */
//    void weakUpdateGroupGoods(MerchantGroupGoods item, List<JSONObject> priceArray);

    /**
     * 删除团购商品
     */
//    void delete(MerchantGroupGoods merchantGroupGoods);

    /**
     * 用户端商城搜索商品列表
     */
    IPage<MerchantGroupGoods> searchList(Page<MerchantGroupGoods> page, Map<String, Object> map);

    /**
     * 设置拼团结算定时计划
     * @param merchantGroupGoods 拼团商品
     * */
    void setGroupGoodsOverTiming(MerchantGroupGoods merchantGroupGoods);

    /**
     * 删除拼图结束时间
     * */
    void removeGroupGoodsOverTiming(MerchantGroupGoods merchantGroupGoods);

    /**
     * 判断商品是否在拼团中
     * @param id 商品id
     * @return 在 true
     * */
    boolean isSpellGrouping(Long id);

    /**
     * 判断优惠档位是否超标
     * 即 , 优惠档位是否超过库存 以及 价格是否超过原价 高档位 优惠价是否低与低档位 , 若超标会抛出业务异常
     * @param hasSpec 是否有规格 1 是 -1 否
     * @param originalInventory 商品原库存
     * @param originalPrice 商品原价
     * @param priceArr 团购价格列表
     * */
    void isPreferentialOverweight(Integer hasSpec, Integer  originalInventory, BigDecimal originalPrice, List<JSONObject> priceArr);

    /**
     * 结算团购商品
     * @param bgId 商品id
     * */
//    void settlementGroupGoodsCashBack(Long bgId);

    /**
     * 下架商品并给用户发消息
     */
    void down(List<UsGroupGoodsOrder> list, MerchantGroupGoods merchantGroupGoods);

    /**
     * 获取附近团购
     * @param lat String 维度
     * @param lng String 经度
     * @return 团购对象
     */
    List<GroupGoodsDTO> getNearbyGroupGoods(String lat, String lng);

    /**
     * 根据快照获取价格范围
     * @param snapshot 商品快照
     * @return 返回价格范围(xx-xx)
     */
    String getPriceRange(String snapshot);

    /**
     * 根据id获取团购商品主图
     * @param groupGoodsId 团购商品id
     * @return 返回团购商品主图url
     */
    String getGoodsMainImgById(Long groupGoodsId);
}

